package com.hrbxlh.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import com.hrbxlh.vo.SkillDTO;
import com.hrbxlh.vo.SkillNotes;

/**
* -------------------------------------------------------
* Copyright (c) 2017, 鑫联华信息科技股份有限公司
* All rights reserved.
* FileName：CourseDao.java
* Description：CourseDao类,负责操作课程数据数据。
* History：
* Date           Author               Desc
* 2017.3.27		  xzx                 建立
* -------------------------------------------------------
*/

@Repository
public interface CourseDao {

	/**
	 * @description 添加课程的方法，需要课程名，副标题，封面颜色，讲师，简介
	 * @param Map<String,Object> paramMap
	 * @return 
	 * @throws Exception
	 */
	public void addCourse(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 查询课程，通过主键
	 * @param Map<String,Object> paramMap
	 * @return 
	 * @throws Exception
	 */
	public Map<String,Object> getCourseDetail(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 修改课程
	 * @param Map<String,Object> paramMap
	 * @return Map<String,Object>
	 * @throws Exception
	 */
	public void saveCourse(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 获取登录人所属院系的所有专业信息
	 * @param Map<String,Object> paramMap  工号
	 * @return List<Map<String,Object>>
	 * @throws Exception
	 */
	public List<Map<String, Object>> getMyProfessionList(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 查询课程，通过名
	 * @param Map<String,Object> paramMap
	 * @return 
	 * @throws Exception
	 */
	public Map<String,Object> getCourseDetailByName(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 查询课程，通过id
	 * @param Map<String,Object> paramMap
	 * @return 
	 * @throws Exception
	 */
	public Map<String,Object> getCourseDetailById(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 查询某教师教的课程列表
	 * @param Map<String,Object> paramMap
	 * @return List courseId课程id courseName课程名称
	 * @throws Exception
	 */
	public List<Map<String,Object>> getTeaTeachCourse(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 删除课程的方法，传的是每个课程的id。 
	 * @param .List<String> paramList 课程id集合
	 * @return boolean (true 成功 ,false失败)
	 * @throws Exception
	 */
	public void delCourse(List<String> paramList) throws Exception;
	
	/**
	 * @description 删除课程对应的章节的方法，传的是每个课程的id。 
	 * @param .List<String> paramList 课程id集合
	 * @return boolean (true 成功 ,false失败)
	 * @throws Exception
	 */
	public void delChapter(List<String> paramList) throws Exception;
	
	/**
	 * @description 删除课程对应的课程表，传的是每个课程的id。 
	 * @param .List<String> paramList 课程id集合
	 * @return boolean (true 成功 ,false失败)
	 * @throws Exception
	 */
	public void delChassTab(List<String> paramList) throws Exception;
	
	/**
	 * @description 删除课程与班级的关联关系，传的是每个课程的id。 
	 * @param .List<String> paramList 课程id集合
	 * @return boolean (true 成功 ,false失败)
	 * @throws Exception
	 */
	public void delCourseClass(List<String> paramList) throws Exception;
	
	/**
	 * @description 删除学生与课程的关联关系，传的是每个课程的id。 
	 * @param .List<String> paramList 课程id集合
	 * @return boolean (true 成功 ,false失败)
	 * @throws Exception
	 */
	public void delStuCourse(List<String> paramList) throws Exception;
	
	/**
	 * @description 删除考试与课程的对应关系，传的是每个课程的id。 
	 * @param .List<String> paramList 课程id集合
	 * @return boolean (true 成功 ,false失败)
	 * @throws Exception
	 */
	public void delCourseExam(List<String> paramList) throws Exception;

	/**
	 * @description 删除删除问题与课程的关系，传的是每个课程的id。 
	 * @param .List<String> paramList 课程id集合
	 * @return boolean (true 成功 ,false失败)
	 * @throws Exception
	 */
	public void delCourseProblem(List<String> paramList) throws Exception;

	/**
	 * @description 删除作业信息，传的是每个课程的id。 
	 * @param .List<String> paramList 课程id集合
	 * @return boolean (true 成功 ,false失败)
	 * @throws Exception
	 */
	public void delHomework(List<String> paramList) throws Exception;
	
	/**
	 * @description 删除题库信息，传的是每个课程的id。 
	 * @param .List<String> paramList 课程id集合
	 * @return boolean (true 成功 ,false失败)
	 * @throws Exception
	 */
	public void delCourseQuestion(List<String> paramList) throws Exception;
	
	/**
	 * @description 删除学生或教师学习课程的历史信息
	 * @param .List<String> paramList 课程id集合
	 * @return boolean (true 成功 ,false失败)
	 * @throws Exception
	 */
	public void delUserStudyHistory(List<String> paramList) throws Exception;
	
	
	/**
	 * @description 清空进度信息的方法
	 * @param 课程id
	 * @return boolean (true 成功 ,false失败)
	 * @throws Exception
	 */
	public void emptyProcess(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 添加进度信息的方法
	 * @param 课程id
	 * @return boolean (true 成功 ,false失败)
	 * @throws Exception
	 */
	public void addProcess(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 录入教师将课程录入后需要再将教师与课程的关系录入到中间表中（关系标识是1）,在为教师排课的时候也用这个方法，关系标识是0
	 * @param 
	 * @return boolean (true 成功 ,false失败)
	 * @throws Exception
	 */
	public void addRelTeaCourse(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 用课程id与学号查询我的课程进度信息
	 * @param 
	 * @return boolean (true 成功 ,false失败)
	 * @throws Exception
	 */
	public Map<String, Object> getMyCourseProcess(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 获取学生或教师学习了的章节的信息
	 * @param Map<String,Object> paramMap 工号或学号   课程号
	 * @return List
	 * @throws Exception
	 */
	public List<Map<String,Object>> getMyStudyChapterList(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 清除我的某门课程的学习信息（学号，课程号）
	 * @param 
	 * @return 
	 * @throws Exception
	 */
	public void delMyStudyHistory(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 添加我的学习课程信息  学号 课程号   章节号
	 * @param 
	 * @return 
	 * @throws Exception
	 */
	public void addMyStudyHistory(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 获取某专业下的课程信息
	 * @param Map<String,Object> paramMap 专业id
	 * @return List
	 * @throws Exception
	 */
	public List<Map<String,Object>> getCourseByProfessionId(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description修改课程的选课标识
	 * @param Map<String,Object> paramMap 课程id 1（不是选课的）或2（选课的课程）
	 * @return List
	 * @throws Exception
	 */
	public void saveSelectMark(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 获取某个人的学习进度信息
	 * @param Map<String,Object> paramMap 课程id 学号
	 * @return List
	 * @throws Exception
	 */
	public Map<String, Object> getMyStudyProcess(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 查询我的消息列表
	 * @param Map<String,Object> paramMap 工号
	 * @return List
	 * @throws Exception
	 */
	public List<Map<String,Object>> getMyNotice(Map<String, Object> paramMap) throws Exception;

	/**
	 * @description 查询我的班级对应课程的列表（结课管理）
	 * @param Map<String,Object> paramMap 工号
	 * @return List
	 * @throws Exception
	 */
	public List<Map<String,Object>> getMyClassCourseList(Map<String,Object> paramMap) throws Exception;
	
	/**
	 * @description 将某班级对应的某课程进行完结
	 * @param Map<String,Object> paramMap 课程id 1（不是选课的）或2（选课的课程）
	 * @return List
	 * @throws Exception
	 */
	public void endCourseClass(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 将学生与选课班级的关联加进去
	 * @param Map<String,Object> paramMap 课程id 1（不是选课的）或2（选课的课程）
	 * @return List
	 * @throws Exception
	 */
	public void addSelectRestuClass(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 删除学生与选课班级的关联信息
	 * @param Map<String,Object> paramMap 课程id 1（不是选课的）或2（选课的课程）
	 * @return List
	 * @throws Exception
	 */
	public void delStuReSelectClass(List<String> paramList) throws Exception;
	
	/**
	 * @description 删除选课班级的信息
	 * @param Map<String,Object> paramMap 课程id 1（不是选课的）或2（选课的课程）
	 * @return List
	 * @throws Exception
	 */
	public void delSelectClass(List<String> paramList) throws Exception;
	
	/**
	 * @description 删除教师与班级的关联关系
	 * @param Map<String,Object> paramMap 课程id 1（不是选课的）或2（选课的课程）
	 * @return List
	 * @throws Exception
	 */
	public void delTeaReClass(List<String> paramList) throws Exception;
	
	/**
	 * @description 通过课程，章节，查询课程课件信息
	 * @param Map<String,Object> paramMap 课程id 章节id
	 * @return List
	 * @throws Exception
	 */
	public Map<String, Object> getChapterByCourseId(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * @description 查询所有课程
	 * @param Map<String,Object> paramMap
	 * @return 
	 * @throws Exception
	 */
	public List<Map<String,Object>> getAllCourse() throws Exception;
	
	/**
	 * @description 获取某个老师教的全部课程
	 * @param Map<String,Object> paramMap 工号
	 * @return List
	 * @throws Exception
	 */
	public List<Map<String,Object>> getMyClasses(Map<String, Object> paramMap) throws Exception;
	
	Integer insertSkill(@Param("SkillNotes") SkillNotes SkillNotes);


	/**
	 * 修改技能信息
	 *
	 * @param skillDTOS
	 * @return
	 */
	int updateSkill(@Param("name") String name ,@Param("id") Integer id,@Param("falg") Integer falg);

	void updateSkillall(@Param("SkillNotes") SkillNotes SkillNotes);
	/**
	 * 查询技能信息
	 *
	 * @param skillDTOS
	 * @return
	 */
	List<SkillDTO> querySkill(@Param("parentId") Integer parentId, @Param("level") Integer level, @Param("name") String name, @Param("key") String key);

	SkillNotes querySkillById(@Param("parentId") Integer parentId);

	List<Map<String,Object>>querySkillCourse(@Param("userid") Long userid, @Param("name") String name);

	List<SkillNotes> getChildLists(@Param("id") Integer id);

	List<SkillNotes> getChildListsnew();

	void deleteSkill(@Param("ids") List<Integer> ids);

	List<SkillNotes> querySkillCourseInfo();

	List<Map<String, Object>> querySkillCourseInfonew(@Param("userid") Long userid);
}
